﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Objects;
using System.Data.Objects.DataClasses;

namespace Ferreteria.Forms
{
    public partial class frmRubrosyCategorias : Form
    {
        DisancoEntities context;
        DataTable dtRubros;
        DataTable dtCategorias;

        Categorias categSeleccionada;

        public frmRubrosyCategorias()
        {
            InitializeComponent();

            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

            this.cargarRubros();

            this.cargarCategorias();
        }



        void cargarRubros()
        {
            dtRubros = null;
            dtRubros = new DataTable();
            dtRubros.Columns.Add("id");
            dtRubros.Columns.Add("Nombre");
            dtRubros.Columns.Add("Descripcion");

            cmbRubros.Items.Clear();

            foreach (var rubro in context.Rubros)
            {
                DataRow fila = dtRubros.NewRow();
                fila["id"] = rubro.rubro_id;
                fila["Nombre"] = rubro.rubro_nombre;

                dtRubros.Rows.Add(fila);

                cmbRubros.Items.Add(rubro);
            }

            dgvRubros.DataSource = dtRubros;
            dgvRubros.Columns["id"].Visible = false;
            dgvRubros.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvRubros.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

            cmbRubros.DisplayMember = "rubro_nombre";
        }

        void cargarCategorias()
        {
            dtCategorias = null;
            dtCategorias = new DataTable();
            dtCategorias.Columns.Add("id");
            dtCategorias.Columns.Add("Categoria");
            dtCategorias.Columns.Add("Rubro");
            dtCategorias.Columns.Add("Descripcion");

            foreach (var categoria in context.Categorias)
            {
                DataRow fila = dtCategorias.NewRow();

                fila["id"] = categoria.categ_id;
                fila["Categoria"] = categoria.categ_nombre;
                fila["Rubro"] = categoria.Rubros.rubro_nombre;

                //fila["Descripcion"] = categoria.categ_descripcion;

                dtCategorias.Rows.Add(fila);
            }

            dgvCategorias.DataSource = dtCategorias;
            dgvCategorias.Columns["id"].Visible = false;
            dgvCategorias.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvCategorias.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
        }

        private void lnkAgregarCat_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {

        }

        private void dgvCategorias_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            //categSeleccionada = new Categorias();

            int idCatSeleccionada = Convert.ToInt32(dgvCategorias.SelectedRows[0].Cells["id"].Value);

            categSeleccionada = context.Categorias.FirstOrDefault(c => c.categ_id == idCatSeleccionada);

            txbCatNombre.Text = categSeleccionada.categ_nombre;
            //txbCatDescripcion.Text = categSeleccionada.categ_descripcion;
            cmbRubros.SelectedItem = categSeleccionada.Rubros;

            bttnAgregarCategoria.Enabled = false;
            bttnModifCateg.Enabled = true;


        }

        private void lnkLimpiar_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.limpiarCategoria();
        }

        private void lnkModificar_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {

        }

        void limpiarCategoria()
        {
            bttnAgregarCategoria.Enabled = true;
            bttnModifCateg.Enabled = false;


            txbCatNombre.Text = "";
            cmbRubros.SelectedItem = null;
            categSeleccionada = null;
        }

        private void lnkEliminarCat_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            //try
            //{
            //    context.Categorias.DeleteObject(categSeleccionada);
            //    context.SaveChanges();
            //}
            //catch (Exception error)
            //{
            //    MessageBox.Show(error.ToString());
            //}
            //cargarCategorias();
            //limpiarCategoria();
        }

        private void btnAgregarNvoRubro_Click(object sender, EventArgs e)
        {
            if (txbNombre.Text != "")
            {
                var rubro = new Rubros();
                rubro.rubro_nombre = txbNombre.Text;

                context.AddToRubros(rubro);

                try
                {
                    context.SaveChanges();
                    txbNombre.Text = "";

                    context = null;
                    context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

                    cargarRubros();
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.ToString());
                }
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bttnAgregarCategoria_Click(object sender, EventArgs e)
        {
            if (cmbRubros.SelectedItem != null)
            {

                //Metodo para buscar si existe ya una categoria con ese nombre
                bool busquedaCat = false;
                Categorias nuevaCategoria = new Categorias();

                foreach (var cat in context.Categorias)
                {
                    if (cat.categ_nombre.ToLower() == txbCatNombre.Text.ToLower())
                    {
                        busquedaCat = true;
                        nuevaCategoria = cat;
                        break;
                    }
                }

                try
                {
                    //Si no se encontro, se añade como nueva. Sino, se modifica la que ya esta
                    if (!busquedaCat)
                    {
                        nuevaCategoria.categ_id = getCategId();
                        nuevaCategoria.categ_nombre = txbCatNombre.Text;
                        nuevaCategoria.Rubros = (Rubros)cmbRubros.SelectedItem;

                        context.Categorias.AddObject(nuevaCategoria);
                    }
                    else
                    {
                        MessageBox.Show("Ya existe una categoria con ese nombre");
                    }
                    context.SaveChanges();
                    txbCatNombre.Text = "";
                    cmbRubros.SelectedItem = null;

                    //context = null;
                    context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.ToString());
                }

                cargarCategorias();
            }
            else
            {
                MessageBox.Show("Debe seleccionar algun rubro primero");
            }
        }

        Int32 obtenerIdCateg()
        {
            if ((context.Categorias.Count()) == 0)
                return 1;
            else
                return context.Categorias.Max(cat => cat.categ_id) + 1;
        }


        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            try
            {
                this.categSeleccionada.categ_nombre = txbCatNombre.Text;
                //this.categSeleccionada.categ_descripcion = txbCatDescripcion.Text;
                this.categSeleccionada.Rubros = (Rubros)cmbRubros.SelectedItem;

                context.SaveChanges();
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }

            this.limpiarCategoria();
            this.cargarCategorias();
        }

        private int getCategId()
        {
            try
            {
                int numero;

                if (context.Categorias.Count() > 0)
                {
                    numero = context.Categorias.Max(cat => cat.categ_id) + 1;
                }
                else
                {
                    numero = 1;
                }

                return numero;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return 1;
            }
        }
    }
}
